//============================================================================
// Name        : Card.h
// Author      : awhuck
// Version     :
// Copyright   : 
// Description : The Card class is responsible for creating card
//               objects.  These objects store all the properties
//               of each card including their effects and graphics
//               identifier.
//============================================================================


#ifndef CARD_H_
#define CARD_H_

#include <string>
#include <vector>

#include "../graphics/surface.h"
#include "../object.h"
#include "card_info.h"

using namespace std;

/// DEFINES ///
#define CARD_CONTENT_X			6
#define CARD_CONTENT_Y			6
#define CARD_NAME_FONT			FONT_DEJA_VU_SANS
#define CARD_NAME_FONT_SIZE		18
#define CARD_NAME_COLOR			COLOR_BLACK
#define CARD_INSTANT_STRING		"Instant"
#define CARD_CATEGORY_FONT		FONT_KNIGHT
#define CARD_CATEGORY_FONT_SIZE	8
#define CARD_CATEGORY_COLOR		COLOR_BLACK
#define CARD_EFFECTS_INDENT		0
#define CARD_EFFECTS_FONT		FONT_KNIGHT
#define CARD_EFFECTS_FONT_SIZE	8
#define CARD_EFFECTS_COLOR		COLOR_BLACK
#define CARD_PATTERN_INDENT_X	110
#define CARD_PATTERN_INDENT_Y	3
#define CARD_PATTERN_DIMENSION	6
#define CARD_PATTERN_SIZE		10
///////////////

/*This class is meant to be extended.  The base class defines
 * the features common to all cards.
 */
class Card : public Object
{
public:
	///Constructor
	Card(CardInfo* info);
	
	~Card();
	
	/// Gets the card info.
	CardInfo* GetInfo();
	
	/// Clears the card info WITHOUT freeing it.
	void ClearInfo() { info = NULL; }
	
private:
	/// Draws the card.
	void DrawCard();
	/// Draws the card's pattern.
	void DrawPattern(int x, int y);
	/// Draws the instant effects part of the card.
	void DrawInstant(int* x, int* y);
	/// Draws the per level effects part of the card.
	void DrawPerLevel(int* x, int* y);
	
private:
	CardInfo* 				info;
};

#endif /*CARD_H_*/
